pub fn find_max_prime_factor(mut number: u128) -> u128 {
    let mut primes = sieve_of_eratosthenes(10_000_000);
    let mut max_prime = 1;

    // 使用素数表进行因数分解
    for prime in primes {
        let prime_u128 = prime as u128;
        if prime_u128 * prime_u128 > number {
            break;
        }

        while number % prime_u128 == 0 {
            max_prime = prime_u128;
            number /= prime_u128;
        }
    }

    // 如果剩下的数仍然大于 1，则它是一个素数，也是最大的素数因子
    if number > 1 {
        max_prime = number;
    }

    max_prime
}

/// 使用埃拉托斯特尼筛法生成素数表
fn sieve_of_eratosthenes(limit: usize) -> Vec<usize> {
    let mut is_prime = vec![true; limit + 1];
    is_prime[0] = false; // 0 不是素数
    is_prime[1] = false; // 1 不是素数

    for i in 2..=limit {
        if is_prime[i] {
            let mut multiple = i * i;
            while multiple <= limit {
                is_prime[multiple] = false;
                multiple += i;
            }
        }
    }
    // 返回所有素数
    is_prime
        .iter()
        .enumerate()
        .filter_map(|(num, &prime)| if prime { Some(num) } else { None })
        .collect()
}
